﻿/*Load dữ liệu từ các table
        * 
        * 1.Catalogue_SchoolYear
        * 2.Catalogue_Term
        * 3.Training_ScoreType
        * 4.Training_SubjectClass_ScoreType
*/
/* Lưu dữ liệu vào table
        * 1.Training_SubjectClass_ScoreType
*/
using System;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using UniMana.Utils.Data;
using UniMana.Utils.Controls;
using DevExpress.XtraBars;
using UniMana.Data;
using UniMana.Utils.Configs;
using UniMana.Utils.Helper;

namespace UniMana.Win.Training
{
    public partial class FrmSubject_Class_ScoreType : DevExpress.XtraEditors.XtraForm
    {
        #region [Declare Variables]
        private bds mbds = new bds();
        private DBMain m_data = new DBMain();
        #endregion
        public  FrmSubject_Class_ScoreType()
        {
            if (!SysUtils.CheckAccessByRule(RuleConfig.SCORETYPE))
            {
                XtraMessageBox.Show("Bạn không có quyền này!", "Thông báo");
                return;
            }
            InitializeComponent();
            LoadData();
            Button();
        }
        #region [Events]
        //
        public  void LoadData()
        { 
            lueCatalogue_Term.GetData(m_data.m_DCReadOnly.Catalogue_Terms);
            lueCatalogue_SchoolYear.GetData(m_data.m_DCReadOnly.Catalogue_SchoolYears);
            lueCatalogue_Department.GetData(m_data.m_DCReadOnly.Catalogue_Departments.Where(p => p.SubjectManage.ToString() == "true"));
            lueTraining_ScoreType.GetData(m_data.m_DCReadOnly.Training_ScoreTypes);
            xucBar1.btnSave.Enabled = false;
            xucBar1.btnImportExcel.Enabled = false;
        }
        public  void Button()
        {
            xucBar1.btnAddNew_Click += new xucBar.ButtonClickHandler(btnAddNew_Click);
            xucBar1.btnDelete_Click += new xucBar.ButtonClickHandler(btnDelete_Click);
            //xucBar1.btnEdit_Click += new xucBar.ButtonClickHandler(btnEdit_Click);
            //xucBar1.btnCancel_Click += new xucBar.ButtonClickHandler(btnCancel_Click);
            xucBar1.btnSave_Click += new xucBar.ButtonClickHandler(btnSave_Click);
            xucBar1.btnRefresh_Click += new xucBar.ButtonClickHandler(btnRefresh_Click);
            xucBar1.btnExport_Click += new xucBar.ButtonClickHandler(btnExportExcel_Click);
            xucBar1.btnPrint_Click += new xucBar.ButtonClickHandler(this.btnPrint_ItemClick);
        }
        //Buttons
        private void btnAddNew_Click(object sender, ItemClickEventArgs e)
        {
            if (!SysUtils.CheckAddByRule(RuleConfig.SCORETYPE))
            {
                XtraMessageBox.Show("Bạn không có quyền này!", "Thông  báo");
                return;
            }
            if (lueTraining_Subject_Class.EditValue != null && lueTraining_ScoreType.EditValue != null)
            {
                if (m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Check(
                    lueTraining_Subject_Class.GetIntValue(), 
                    lueTraining_ScoreType.GetIntValue()) == false)
                {
                    if (txtDefaultPercent != null)
                    {
                        if (txtDefaultPercent.Text != "")
                        {
                            insertScoreType(lueTraining_Subject_Class.GetIntValue(), lueTraining_ScoreType.GetIntValue(), float.Parse(txtDefaultPercent.Text), txtNote.Text);
                        }
                        else
                        {
                            XtraMessageBox.Show("Phần trăm mặc định không được trống!","Thông báo");
                        }
                    }
                    else
                    {
                        XtraMessageBox.Show("Phần trăm mặc định không được trống!", "Thông báo");
                    }
                }
                else
                {
                    XtraMessageBox.Show("Dữ liệu đã tồn tại", "Thông báo");
                }
            }
        }
        private void btnExportExcel_Click(object sender, ItemClickEventArgs e)
        {
            if (!SysUtils.CheckExportByRule(RuleConfig.SCORETYPE))
            {
                XtraMessageBox.Show("Bạn không có quyền này!","Thông báo");
                return;
            }
            SaveFileDialog saveFile = new SaveFileDialog();
            saveFile.FileName = "Loại Điểm Lớp_" + lueTraining_Subject_Class.Text + "_" + DateTime.Now.Date.ToShortDateString().Replace('/', '_');
            saveFile.Title = "Xuất ra tệp tin";
            saveFile.DefaultExt = "xls";
            saveFile.Filter = "Excel 2003 (*.xls)|";
            if (saveFile.ShowDialog() == DialogResult.OK)
            {
                grvSubject_ScoreType.ExportToXls(saveFile.FileName);
            }
        }
        private void btnRefresh_Click(object sender, ItemClickEventArgs e)
        {
            mbds = new bds();
            getSubjectClass();
            LoadData();
            lueCatalogue_Term.EditValue = null;
            lueCatalogue_SchoolYear.EditValue = null;
            lueCatalogue_Department.EditValue = null;
            lueTraining_Subject_Class.Properties.DataSource = null;
            lueTraining_Subject_Class.Properties.ImmediatePopup = true;
            lueTraining_Subject_Class.EditValue = null;
            lueTraining_ScoreType.EditValue = null;
            txtDefaultPercent.EditValue = null;
            txtNote.Text = null;
            gctSubject_ScoreType.DataSource = null;
            lueTraining_Subject_Class.Properties.NullText = "--Chọn--";
        }
        private void btnDelete_Click(object sender, ItemClickEventArgs e)
        {
            if (!SysUtils.CheckDeleteByRule(RuleConfig.SCORETYPE))
            {
                XtraMessageBox.Show("Bạn không có quyền này!", "Thông báo");
                return;
            }
            if (lueTraining_Subject_Class.EditValue != null && grvSubject_ScoreType.RowCount > 0)
            {
                int subjectClassKey = Convert.ToInt32(grvSubject_ScoreType.GetFocusedRowCellValue(grvSubject_ScoreType.Columns[0]).ToString());
                int scoreTypeKey = Convert.ToInt32(grvSubject_ScoreType.GetFocusedRowCellValue(grvSubject_ScoreType.Columns[1]).ToString());
                if (m_data.m_DCReadOnly.Training_Scores.CheckDelete(subjectClassKey, scoreTypeKey) == false)
                {
                    DialogResult diag = XtraMessageBox.Show("Bạn có muốn xóa hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    switch (diag)
                    {
                        case DialogResult.Yes:
                            {
                                if (scoreTypeKey.ToString() == DefaultConfig.SCORETYPE_2)
                                {
                                    if (m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Check(lueTraining_Subject_Class.GetIntValue(), Convert.ToInt32(DefaultConfig.SCORETYPE_3)) == false)
                                    {
                                        Training_SubjectClass_ScoreTypeInfo info = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, scoreTypeKey);
                                        info.Delete();
                                        info.Save();
                                        XtraMessageBox.Show("Xóa thành công!", "Thông báo");
                                        getInfo();
                                        break;
                                    }
                                    else
                                    {
                                        XtraMessageBox.Show("Vui lòng xóa điểm cuối kì lần 2 trước!","Thông báo");
                                        break;
                                    }
                                }
                                else
                                {
                                    Training_SubjectClass_ScoreTypeInfo info = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, scoreTypeKey);
                                    info.Delete();
                                    info.Save();
                                    XtraMessageBox.Show("Xóa thành công!", "Thông báo");
                                    getInfo();
                                    break;
                                }
                            }
                        case DialogResult.No:
                            {
                                break;
                            }
                    }
                }
                else
                {
                    XtraMessageBox.Show("Loại điểm đang được sử dụng!", "Thông báo");
                }
            }
        }
        private void btnSave_Click(object sender, ItemClickEventArgs e)
        {
            if (lueTraining_Subject_Class != null && lueTraining_ScoreType != null)
            {
                if (txtDefaultPercent != null && txtDefaultPercent.Text != "")
                {
                    if (m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Check(lueTraining_Subject_Class.GetIntValue(), lueTraining_ScoreType.GetIntValue()) == true)
                    {
                            updateScoreType(lueTraining_Subject_Class.GetIntValue(), lueTraining_ScoreType.GetIntValue(),
                                            float.Parse(txtDefaultPercent.Text), txtNote.Text);
                    }
                    else
                    {
                        insertScoreType(lueTraining_ScoreType.GetIntValue(), lueTraining_ScoreType.GetIntValue(), float.Parse(txtDefaultPercent.Text), txtNote.Text);
                    }
                    getInfo();
                    lueTraining_ScoreType.EditValue = null;
                    xucBar1.btnSave.Enabled = false;
                }
                else
                {
                    XtraMessageBox.Show("Vui lòng nhập % mặc định!", "Thông báo");
                }
            }
        }
        private void btnPrint_ItemClick(object sender, ItemClickEventArgs e)
        {
            printableComponentLink1.ClearDocument();
            printableComponentLink1.RtfReportHeader = "Bộ Giáo Dục và Đào Tạo \n Trường Đại Học Kinh Tế Công Nghiệp Long An \n Danh Sách Loại Điểm Lớp : " + lueTraining_Subject_Class.Text;
            printableComponentLink1.ShowPreviewDialog();
        }
        //LookupEdits
        private void lueCatalogue_Term_EditValueChanged(object sender, EventArgs e)
        {
            getSubjectClass();
        }
        private void lueCatalogue_SchoolYear_EditValueChanged(object sender, EventArgs e)
        {
            getSubjectClass();
        }
        private void lueCatalogue_Department_EditValueChanged(object sender, EventArgs e)
        {
            getSubjectClass();
        }
        private void lueTraining_Subject_Class_EditValueChanged(object sender, EventArgs e)
        {
            getInfo();
        }
        //GridView 
        private void grvSubject_ScoreType_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            try
            {
                if (grvSubject_ScoreType.GetFocusedRowCellValue(grvSubject_ScoreType.Columns["Training_ScoreTypeKey"]).ToString() != DefaultConfig.SCORETYPE_3)
                {
                    xucBar1.btnSave.Enabled = true;
                    int scoreTypeKey = int.Parse(grvSubject_ScoreType.GetFocusedRowCellValue("Training_ScoreTypeKey").ToString());
                    mbds = new bds();
                    mbds.DataSource = m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Where(p => p.Training_Subject_ClassKey == lueTraining_Subject_Class.GetIntValue() &&
                                                                    p.Training_ScoreTypeKey == scoreTypeKey);
                    lcgScoreInfo.LoadOneRecord(mbds);
                }
            }
            catch { }
        }
        //Methods
        private void txtDefaultPercent_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }
        private bool checkPercent(int subjectClassKey,float percent, int scoreType)
        {
            //, float dp=0
            float per = percent;
            int scoreType3 = Int32.Parse(DefaultConfig.SCORETYPE_3);
            for (int i = 0; i < grvSubject_ScoreType.RowCount; i++)
            {
                if (int.Parse(grvSubject_ScoreType.GetRowCellValue(i, grvSubject_ScoreType.Columns["Training_ScoreTypeKey"]).ToString()) != scoreType)
                {
                    if (Int32.Parse(grvSubject_ScoreType.GetRowCellValue(i, grvSubject_ScoreType.Columns["Training_ScoreTypeKey"]).ToString()) != scoreType3)
                    {
                        per += float.Parse(grvSubject_ScoreType.GetRowCellValue(i, grvSubject_ScoreType.Columns["DefaultPercent"]).ToString());
                    }
                }   
            }
            if (per <= 100)//- dp <=
                return true;
            else
                return false;
        }
        private void getInfo()
        {
            mbds = new bds();
            mbds.DataSource = m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.GetInfoSubjectScoreType(m_data.m_DCReadOnly.Training_ScoreTypes,
                                                            lueTraining_Subject_Class.GetIntValue());
            gctSubject_ScoreType.DataSource = mbds;
        }
        private void getSubjectClass()
        {
            if (lueCatalogue_Term.EditValue != null && lueCatalogue_SchoolYear.EditValue != null && lueCatalogue_Department.EditValue != null)
            {
                //mbds.DataSource = m_data.m_DCReadOnly.Training_Subject_Classes.GetList(lueCatalogue_Term.GetIntValue(),lueCatalogue_SchoolYear.GetIntValue());
                //lueTraining_Subject_Class.GetData(m_data.m_DCReadOnly.Training_Subject_Classes.GetList(ControlUtils.GetIntValue(lueCatalogue_Term), ControlUtils.GetIntValue(lueCatalogue_SchoolYear)), displayMember: "Name");
                lueTraining_Subject_Class.GetData(m_data.m_DCReadOnly.Training_Subject_Classes.GetSubjectClassList(m_data.m_DCReadOnly.Training_Subjects, m_data.m_DCReadOnly.Catalogue_Departments, lueCatalogue_Term.GetIntValue(), lueCatalogue_SchoolYear.GetIntValue(), lueCatalogue_Department.GetIntValue()), displayMember:"ID");
            }
        }
        private void insertScoreType(int subjectClassKey, int scoreTypeKey,float percent, string note=null)
        {
            Training_SubjectClass_ScoreTypeInfo info = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, scoreTypeKey);
            Training_Subject_ClassInfo infoClass = new Training_Subject_ClassInfo(subjectClassKey);
            if (infoClass.Properties.Yearly == true)
            {
                float dp = 0;
                int scoreType3 = Int32.Parse(DefaultConfig.SCORETYPE_3);
                if (m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Check(subjectClassKey, scoreType3) == true)
                {
                    Training_SubjectClass_ScoreTypeInfo infoss = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, scoreType3);
                    dp = float.Parse(infoss.Properties.DefaultPercent.Value.ToString());
                }
                if (scoreTypeKey.ToString() == scoreType3.ToString())
                {
                    int scoreType2 = Convert.ToInt32(DefaultConfig.SCORETYPE_2);
                    Training_SubjectClass_ScoreTypeInfo info1 = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, scoreType2);
                    if (m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Check(subjectClassKey, scoreType2) == true)
                    {
                        txtDefaultPercent.Text = info1.Properties.DefaultPercent.Value.ToString();
                        info.Properties.DefaultPercent = float.Parse(info1.Properties.DefaultPercent.Value.ToString());
                        info.Properties.Note = note;
                        info.Save();
                    }
                    else
                    {
                        XtraMessageBox.Show("Vui lòng thêm cột điểm cuối kì trước!", "Thông báo");
                    }
                }
                else
                {
                    if (checkPercent(subjectClassKey, percent, lueTraining_ScoreType.GetIntValue()))
                    {
                        info.Properties.DefaultPercent = percent;
                        info.Properties.Note = note;
                        info.Save();
                        XtraMessageBox.Show("Thêm thành công!", "Thông báo");
                    }
                    else
                    {
                        XtraMessageBox.Show("Vui lòng kiểm tra lại phần trăm mặc định! \n Phần trăm mặc định <= 100", "Thông báo");
                    }
                }
            }
            else
            {
                if (checkPercent(subjectClassKey, percent, lueTraining_ScoreType.GetIntValue()))
                {
                    info.Properties.DefaultPercent = subjectClassKey;
                    info.Properties.Note = note;
                    info.Save();
                    XtraMessageBox.Show("Thêm thành công!", "Thông báo");
                }
                else
                {
                    XtraMessageBox.Show("Vui lòng kiểm tra lại phần trăm mặc định! \n Phần trăm mặc định <= 100", "Thông báo");
                }
            }
            getInfo();
        }
        private void updateScoreType(int subjectClassKey, int scoreTypeKey, float percent, string note = null)
        {
            Training_SubjectClass_ScoreTypeInfo info = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, scoreTypeKey);
            Training_Subject_ClassInfo infoClass = new Training_Subject_ClassInfo(subjectClassKey);
            if (infoClass.Properties.Yearly == true)
            {
                float dp = 0;
                if (m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Check(subjectClassKey, Int32.Parse(DefaultConfig.SCORETYPE_3)) == true)
                {
                    Training_SubjectClass_ScoreTypeInfo infoss = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, int.Parse(DefaultConfig.SCORETYPE_3));
                    dp = float.Parse(infoss.Properties.DefaultPercent.Value.ToString());
                }
                if (info.Properties.Training_ScoreTypeKey.ToString() == DefaultConfig.SCORETYPE_3)
                {
                    Training_SubjectClass_ScoreTypeInfo info1 = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, Convert.ToInt32(DefaultConfig.SCORETYPE_2));
                    info.Properties.DefaultPercent = info1.Properties.DefaultPercent;
                    info.Properties.Note = note;
                    info.Save();
                    XtraMessageBox.Show("Cập nhật thành công!", "Thông báo");
                }
                else if (info.Properties.Training_ScoreTypeKey.ToString() == DefaultConfig.SCORETYPE_2)
                {
                    if (checkPercent(subjectClassKey, percent, lueTraining_ScoreType.GetIntValue()))//, dp
                    {
                        info.Properties.DefaultPercent = percent;
                        info.Properties.Note = note;
                        info.Save();
                        int scoreType3 = Convert.ToInt32(DefaultConfig.SCORETYPE_3);
                        Training_SubjectClass_ScoreTypeInfo info1 = new Training_SubjectClass_ScoreTypeInfo(subjectClassKey, scoreType3);
                        if (m_data.m_DCReadOnly.Training_SubjectClass_ScoreTypes.Check(subjectClassKey, scoreType3) == true)
                        {
                            info1.Properties.DefaultPercent = info.Properties.DefaultPercent;
                            info1.Save();
                        }
                        XtraMessageBox.Show("Cập nhật thành công!", "Thông báo");
                    }
                    else
                    {
                        XtraMessageBox.Show("Vui lòng kiểm tra lại phần trăm mặc định! \n Phần trăm mặc định <= 100", "Thông báo");
                    }
                }
                else
                {
                    if (checkPercent(subjectClassKey, percent, lueTraining_ScoreType.GetIntValue()))//dp
                    {
                        info.Properties.DefaultPercent = percent;
                        info.Properties.Note = note;
                        info.Save();
                        XtraMessageBox.Show("Cập nhật thành công!", "Thông báo");
                    }
                    else
                    {
                        XtraMessageBox.Show("Vui lòng kiểm tra lại phần trăm mặc định! \n Phần trăm mặc định <= 100", "Thông báo");
                    }
                }
            }
            else
            {
                if (checkPercent(subjectClassKey, percent, lueTraining_ScoreType.GetIntValue()))
                {
                    info.Properties.DefaultPercent = percent;
                    info.Properties.Note = note;
                    info.Save();
                    XtraMessageBox.Show("Cập nhật thành công!", "Thông báo");
                }
                else
                {
                    XtraMessageBox.Show("Vui lòng kiểm tra lại phần trăm mặc định! \n Phần trăm mặc định <= 100", "Thông báo");
                }
            }
            getInfo();
        }
        #endregion
    }
}